package com.shujia.day02;

public class Demo05LogisticCode {
    public static void main(String[] args) {
        /*
            TODO 逻辑运算符
                1. &(与) |（或） ！（非） ^(异或)  &&（短路与） ||（短路或）
              逻辑：
                 1.&(与) 当前后两个结果都为true 结果返回 true 否则false
                 2.|（或） 当前后两个结果有一个为true 结果返回 true 否则false
                 3.！（非） 当前结果进行取反
                 4.^(异或) 当前后两个结果不同为true 否则返回false

         */
        System.out.println(true & true); // true
        System.out.println(true & false); // false
        System.out.println(true | false); // true
        System.out.println(true | true);  // true
        System.out.println(!true); // false
        System.out.println(true ^ true); // false
        System.out.println(true ^ false); // true


        /*
           TODO 短路逻辑运算符
            || 对于短路或运算 在计算时
                特点：
                    当左边的条件为true时，可以不用计算右边的表达式 直接返回true
                    当左边的条件为false时，必须计算右边的表达式
            && 对于短路与运算 和 ||运算 特点相似
                自行测试 短路与运算
            作用：对于短路操作可以提高程序的执行效率
         */
        System.out.println("================");
        int a = 3;
        int b = 5;
        // a++ > b 为false
        // TODO b++是先调用 后加1 而 ++b 先加1 后调用
        System.out.println(a++ > b | b++ > 5); // false
//        System.out.println(a++ > b | ++b > 5); // true
        System.out.println("a:" + a); // 4
        System.out.println("b:" + b); // 6

//        System.out.println(a++ > b || ++b > 5); //
//        System.out.println(++b > 5 || a++ > b); // true  当该代码执行时 a最终结果为 4 可以猜测当前a++ > b 并没有执行
        System.out.println(++b == 5 || a++ > b); // false
        System.out.println("a:" + a); // 5
        System.out.println("b:" + b); // 7


        // 位运算符
//        System.out.println(3 & 4); // 0  => 原码 反码 补码 使用补码进行数据计算 转换二进制后 0 表示false 1表示true 对应位置进行计算
//        System.out.println(3 | 4); // 7
//        System.out.println(3 ^ 4); // 7


    }
}
